/**
 * Created by Administrator on 2015/10/23 0023.
 */

//PTZ实时任务下发结果	PTZ_REALTIME_TASK_ASSIGN_RESULT	当用户配置实时PTZ检测任务后，会收到服务器发送的任务下发结果信息	string
//PTZ实时诊断任务结果	PTZ_REALTIME_TASK_RESULT	当用户配置PTZ诊断实时任务，并且收到任务下发成功的消息后，会收到服务器推送的诊断结果	json
//PTZ实时任务结束	PTZ_REALTIME_TASK_FINISHED	当用户配置视频质量诊断实时任务时，任务执行完或者超时，收到此完毕消息	string
//PTZ复核任务下发结果	PTZ_REVIEW_TASK_ASSIGN_RESULT	当用户复核一个PTZ诊断结果后，会收到复核任务是否下发成功	string
//PTZ复核任务诊断结果	PTZ_REVIEW_TASK_RESULT	当用户复核一个PTZ诊断结果，并且复核任务下发成功后，会收到服务器推送的诊断结果	json
//PTZ复核任务结束	PTZ_REVIEW_TASK_FINISHED	当用户复核一个诊断结果，并且复核任务下发成功后，任务执行完或者超时，收到此完毕消息	string

var msgType=[
    "LOGIN",                  //0
    "LOGOUT",                 //1
    "MESSAGE",                //2
    "LOGIN_SUCCESS",          //3
    "ON_USER_LOGIN",          //4
    "ON_USER_LOGOUT",         //2
    "ALARM",                  //6
    "WORKORDER",              //7
    "LOGIN_ERROR",            //8
    "VQD_TASK",               //9
    "VQD_REALTIME_TASK_ASSIGN_RESULT", //任务下发结果 10
    "VQD_REALTIME_TASK_RESULT", //实时诊断任务结果    11
    "VQD_REALTIME_TASK_FINISHED",//实时任务结束       12
    "VQD_REVIEW_TASK_ASSIGN_RESULT",//复核任务下发结果13
    "VQD_REVIEW_TASK_RESULT",//复核任务诊断结果       14
    "VQD_REVIEW_TASK_FINISHED",//复核任务结束         15
    "ALARM_STATUS",//每秒告警数量                     16
    "SERVER_STATUS_CHANGE",//服务状态变更              17
    "PTZ_REALTIME_TASK_ASSIGN_RESULT",//PTZ实时任务下发结果 18
    "PTZ_REALTIME_TASK_RESULT", //PTZ实时诊断任务结果       19
    "PTZ_REALTIME_TASK_FINISHED", //PTZ实时任务结束         20
    "PTZ_REVIEW_TASK_ASSIGN_RESULT",//PTZ复核任务下发结果   21
    "PTZ_REVIEW_TASK_RESULT",//PTZ复核任务诊断结果          22
    "PTZ_REVIEW_TASK_FINISHED",//PTZ复核任务结束            23
    "VQD_PTZ_TASK",              //PTZ任务                 24
    "DEVICE_STATE_CHANGE",   //设备在线状态变更             25
    "ADG_STATE_INFO_TASK",   //ADG信息任务下发              26
    "ADG_STATE_TASK_ASSIGN_RESULT",//ADG信息任务下发结果    27
    "ADG_STATE_TASK_RESULT", //ADG信息任务结果              28
    "ADG_STATE_TASK_FINISHED",   //ADG信息任务结束           29

    "ADG_REBOOT_TASK",   //ADG重启任务结束           30
    "ADG_REBOOT_TASK_ASSIGN_RESULT",   //ADG重启任务结束           31
    "ADG_REBOOT_TASK_RESULT",   //ADG重启任务结束           32
    "ADG_REBOOT_TASK_FINISHED",   //ADG重启任务结束           33

    "ADG_RECORD_INFO_QUERY",   //ADG任务结束           34
    "ADG_RECORD_TASK_ASSIGN_RESULT",   //ADG信息任务结束           35
    "ADG_RECORD_TASK_RESULT",   //ADG信息任务结束           36
    "ADG_RECORD_TASK_FINISHED",    //ADG信息任务结束           37

    "ADG_RECORD_CONFIG_QUERY",   //ADG信息任务结束           38
    "ADG_RECORD_CONF_TASK_ASSIGN_RESULT",   //ADG信息任务结束           39
    "ADG_RECORD_CONF_TASK_RESULT",   //ADG信息任务结束           40
    "ADG_RECORD_CONF_TASK_FINISHED",    //ADG信息任务结束           41


    "ADG_DB_SYC",  //数据库同步(大类信息)            42
    "ADG_DB_SYC_TASK_ASSIGN_RESULT",  //数据库同步下发结果         43
    "ADG_DB_SYC_TASK_RESULT",  //数据库同步下发结果           44
    "ADG_DB_SYC_TASK_FINISHED"  //数据库同步任务结束     45

];

var MessageType={

    login:msgType[0],
    logout:msgType[1],
    message:msgType[2],
    loginSuccess:msgType[3],
    onUserLogin:msgType[4],
    onUserLogout:msgType[5],
    alarm:msgType[6],
    workOrder:msgType[7],
    loginError:msgType[8],
    vqdTask:{
        vqdTask:msgType[9],
        vqdRealTimeTaskAssigResult:msgType[10],//实时任务下发结果    10
        vqdRealTimeTaskResult:msgType[11],//实时诊断任务结果     11
        vqdRealTimeTaskFinished:msgType[12],//实时任务结束       12
        vqdReviewTaskAssignResult:msgType[13],//复核任务下发结果 13
        vqdReviewTaskResult:msgType[14],//复核任务诊断结果       14
        vqdReviewTaskFinished:msgType[15]//复核任务结束          15
    },
    alarm_status:msgType[16],
    serverStatusChange:msgType[17],//服务状态变更              17
    ptzTask:{
        ptzTask:msgType[24],
        ptzRealTimeTaskAssigResult:msgType[18],//ptz实时任务下发结果    10
        ptzRealTimeTaskResult:msgType[19],//实时诊断任务结果     11
        ptzRealTimeTaskFinished:msgType[20],//实时任务结束       12
        ptzReviewTaskAssignResult:msgType[21],//复核任务下发结果 13
        ptzReviewTaskResult:msgType[22],//复核任务诊断结果       14
        ptzReviewTaskFinished:msgType[23]//复核任务结束          15
    },
    deviceStateChange:msgType[25],
    adgStateInfo:{
        adgStateInfoTask:msgType[26],
        adgStateTaskAssignResult:msgType[27],
        adgStateTaskResult:msgType[28],
        adgStateTaskFinished:msgType[29]
    },
    adgReboot:{
        adgRebootTask:msgType[30],
        adgRebootTaskAssignResult:msgType[31],
        adgRebootTaskResult:msgType[32],
        adgRebootTaskFinished:msgType[33]
    },
    adgRecord:{
        adgRecordTask:msgType[34],
        adgRecordTaskAssignResult:msgType[35],
        adgRecordTaskResult:msgType[36],
        adgRecordTaskFinished:msgType[37]
    },
    adgRecordConfig:{
        adgRecordConfigTask:msgType[38],
        adgRecordConfigTaskAssignResult:msgType[39],
        adgRecordConfigTaskResult:msgType[40],
        adgRecordConfigTaskFinished:msgType[41]
    },
    adgDBSyc:{
        adgDBSycTask:msgType[42],
        adgDBSycTaskAssignResult:msgType[43],
        adgDBSycTaskResult:msgType[44],
        adgDBSycTaskFinished:msgType[45]
    }
};

var messageErrorCode=[0, -2, -3, -4, -5, -6, -7, -8, -9, -11, -12, -13, -98, -99];

var messageErrorCodeInterpreter=[
    "没有错误",
    "名称已存在",
    "参数不合法",
    "密码错误",
    "当前工单状态下，无法执行此操作",
    "设备IP已存在",
    "服务器内部数据错误",
    "会话用户信息不存在",
    "任务下发超时",
    "操作超时",
    "消息服务器不可用",
    "操作目标不存在",
    "无效的认证，用户未登录，执行某些操作，会出现这个错误",
    "服务器内部错误，请稍后再试"
];

var msg={
    type:"onMessage",
    from:"name1",
    to:"nam2",
    content:"data"
};

var onMessageListener;

function messageClient(userName,messageListener){


    var chat=new Object();
    onMessageListener=messageListener;
    chat.userName=userName;
    chat.url=wsHost+"/websocket";
    chat.connect=function(){
        this.websocket=new WebSocket(this.url+"/"+this.userName);
        this.websocket.onopen=function(event){

            var eventStr=JSON.stringify(event);
            console.log("on open event: "+eventStr);
            //client.send("connected success!");

        };
        this.websocket.onmessage=function(event){
            var msg=event.data;
            // console.log(event.data);
            var msg=JSON.parse(event.data);
            var messageType=msg.type;
            if(onMessageListener!=undefined){

                onMessageListener(msg);
                return ;
            }
            if(messageType==MessageType.loginSuccess){
                console.log("login success");
            }else if(messageType==MessageType.loginError){
            } else if(messageType==MessageType.message){
            }
        };
        this.websocket.onclose=function(event){
            if(event.code==4741  || ""!=event.reason){
                msg.type=MessageType.logout;
                msg.content=event.reason;
                msg.from="SERVER";
                msg.to="you"
                onMessageListener(msg);
            }
            var eventStr=JSON.stringify(event);
            console.log("on  close event: "+eventStr);

        };
        this.websocket.onerror=function(event){

            var eventStr=JSON.stringify(event);

            console.log("on  error event: "+eventStr);


        };
        chat.sendText=function(msg){

            console.log("send msg: "+msg);
            this.websocket.send(msg);

        };
    };
    chat.disconnect=function(){

        this.websocket.close();
    };
    return chat;
}


function sendMsg(){

    var msg =$("#msg").val();
    var targetUser=$("#tree").tree("getSelected");

    $("#messageBox").append("<p><span>"+chat.userName+"</span><br>"+msg+"</p>");

    var msgStr={
        "from":chat.userName,
        "to":targetUser.id,
        "content":msg,
        "type":msgType[1]

    }
    console.log("send "+JSON.stringify(msgStr));
    chat.sendText(JSON.stringify(msgStr));


}
